【レポート】ハードウェアスタートアップが AWS を活用して短期間で IoT プロダクトをローンチするまで #AWSSummit
はじめに
こんにちは、おおはしりきたけです。 みなさん AWS Summit Online 楽しんでいますでしょうか。
本記事は 「ハードウェアスタートアップが AWS を活用して短期間で IoT プロダクトをローンチするまで」なっています。
セッション概要
スピーカー
- mui Lab 株式会社 Co-Founder Software Architect 久保田 拓也 氏
概要
IoT 製品の佇まいを見直し、テクノロジーとの関わりが作為的ではなく自然であるようにしたいと考え、 木製のスマートデバイス「mui」を開発し2020 年 2 月にローンチしました。AWS IoT Core や AWS Amplify を利用してプロダクト開発を行いたい方や、スタートアップで新規にハードウェアプロダクトを開発したい方向けに、ハードウェアプロダクト特有の課題を抱えながら、スタートアップのタイムラインでプロダクトをローンチするために AWS を活用する中で得た、さまざまな知見を共有します。
セッション視聴のリンクは こちら。
セッションレポート
mui Labのビジョンとスマートホームデバイス「mui」について
情報テクノロジーと人の住まいが無為自然に調和した世界を実現する
このビジョンを実現するためのファーストプロダクトが、2020年1月に世界中に向けてローンチされた。このプロダクトは、家の中で家族のコミュニケーションハブとして他のスマートデバイスやサービスとの連携を行うことができる。
muiボードは、木製のインターフェースで、表面に触れることでLEDの表示が行われる。家電の操作、天気予報・ニュースの受信、テキスト/音声メッセージのやり取りなどを行うことができる。
「mui」のSystem Architecture
全体アーキテクチャ
- モバイルアプリからテキストメッセージの送信やそれに対するボードからの手書きメッセージの応答
- クラウド経由で他社製のサービスやスマートデバイスと連携する構成
- 通信はHTTPの他Pub/SubとしてMQTTを利用している
- API GatewayやLambda、DynamoDBなどマネージドサービスを利用している
API Connection
- API GatewayでAPIのエンドポイントを構成
- アクセス制御
- モバイルアプリCognito ユーザープールを利用
- muiボード:API Gatewayのカスタムオーソライザーを利用
Push notification
- IoT Coreをボード向けのPub/Subとして利用している
- モバイルアプリはサードパーティ製のPush通知サービスを利用
Data Analytics
- DynamoDBからKinesis Data Firehoseを利用してS3にデータを保存
- S3からAtenaを使ってデイリーのクエリを発行してそれを用いてQuickSightで可視化したものをメール及びSlackで社内に連携
プロダクトリリースまでのタイムライン
- 2019/12:本格開発スタート
- 2020/1末:初回ローンチ
非常に短期間での開発で、それまでにプロトタイプベースで技術検証を行ったりですとかシステム構成のある程度の構築はやっていたが、ほとんどのコードや構成というのは12月の時点新しく作り直している状況で、短期間でもローンチまでこぎつけることができたのはAWSを利用したことが大きな要因。
AWS Amplify
- プロジェクトの初期から利用すれば非常にパワフルで便利なフレームワーク
- muiでは、モバイルアプリを作り始める時に、始めてめてSDKを利用しようとして、Mobile SDKがAmplifyのフレームワークに統合されていることを知った
- それまで、全くAmplifyを知らなかったので、すでにアプリケーションを作り始める段階ではCognitoのログイン処理や他のデータベースの設定などは全て完了ており、Amplifyの一番いいところである楽々と高設定を行うのは、9月頃には、実はもう済んでおり、逆にん既存の設定されたCognitoやデータベースに対して設定するというに非常に苦労した
- 皆さんが同じような轍を踏まないようにこの部分について説明
Amazon Cognito
- ユーザー登録/管理に利用している
- APIコール時の認証に利用
- 外部サービスから自社のAPIを呼び出す時のOAuth2の認証基盤として利用
ハマリポイント1:認証ができない
- 最初からAmplifyを使う場合は問題ないが、既存でCognitoを利用してマニュアルで後から追加する場合は注意が必要
- Cognitoではアプリクライアントというの設定する必要がある
- 作成したアプリクライアントに認証後のリダイレクトURLを設定で、認証コードを取得しアクセストークンを取得するための設定を行うが、画面のアプリクライアントの作成画面でデフォルトでオンになっている赤丸のクライアントシークレット生成を行うと、AmplifyからCognitoを通してユーザーログインができないという問題が発生した。
- この設定だと、リフレッシュトークンが返らないオプションになってしまう。
- アクセストークンの有効期限であるデフォルトの待ち時間を経つ認証し直してことになるので、こちらの方法ではアプリのログイン処理としては処理をするの難しい
Sign in with Appleが動かない
- モバイルアプリのリリースは、iOS アプリを公開するためにAppleに審査をを依頼する
- 審査で、Sign in with Appleを有効にしなさいという理由でリジェクトされた
- Cognitoは2019年の秋にSign in with Appleに対応済だったので、対応して再審査したが、サインアップが出来ないということで再リジェクト
- 既存のユーザーはOKだったが、新規のユーザーだとサインアップができないという現象が発生していた。
- AWSのサポートの方に連絡しましてで色々とやり取りをしていたんですけども結局ですねApple側の不具合だった
- 不具合は解消されているが、現状は、iOSではサードパーティ製のログインを無効にしている
日本語入力がバグる
- サポートに報告後から約半年で修正が行われた。
AWS IoT Core
- デバイスの通信処理でPus/Subとして利用している
- Device Shadowは利用していない
- IoT Coreを利用するまでに、証明書を用意したり色々デバイス登録したり面倒な手順があるが、一度やってしまえばマネージドサービスなので、デバイス接続数などですね本当に面倒なところお任せできる
- IoT CoreにはOn Demand Provisioningの仕組みがあり、一度仕組みを構築すると、工場で製品を組み立てる時に一台一台Provisioningしていくことができる。
- こちらのOn Demand Provisioningの仕組みを利用すればその時に生産されたものの証明書がその場で出来上がるので、非常に有用に使うことができる
AWS IoT Core(On Demand Provisioning)
- 工場でデバイスを生産する際に一台一台証明書を発行しIoT Coreにデバイス登録を行っている
- この処理を、全てサーバーレス環境でやりたかったのでLambda実装する必要なデータをS3に保存し、APIの実行時にダウンロードをしている
- ダウンロードしたデータは実行環境インスタンスの添付領域に保存し、Lambda内で証明書の発行処理を行う
- このタイミングでAWS IoT Coreに対してデータを保存し、デバイスの設定情報や生産情報を同時にDynamoDBに書き込みを行っている
- Device Shadowを使っていないので、デバイスの設定情報に関しては自分たちで、DynamoDBの読み書きを行う形で対応を行っている
- 生産情報もDynamoDBに保存しており、これでリアルタイムに状況が監視でるので、例えば工場の生産状況で、完成したり何か問題が起きてしまった時に現場との電話で話す時に問題の切り分けがとてもしやすいような状況になっている。
Amplify、IoT Coreを利用した管理画面デモ
- ログイン処理はCognitoのHosted UIを利用して実装している
- CognitoのHosted UIは、自社のロゴや文字の色はブランディングできるのでとても良いが、文字のローカライズができないのが残念。(サポートに改善要求を投げている)
- 内部でリフレッシュトークンの保存とアクセストークンのリフレッシュをAmplifyが全てやってくれる
- デモ画面では、接続されているデバイスの状況が一覧で見ることができる
AWS Activate
- スタートアップ向けのAWS Activateというプログラムがある
- サポートプログラムが適用されると、AWSの結構長くのクレジットが付与される
- ビジネスサポートプランも利用することができる
- ベンチャーキャピタル経由で申し込むことが可能
- このプログラムとは別だが、ソリューションアーキテクトの方にアーキテクチャレビューを行ってもらった
今後の展望
- Amplify SDKを使用してAndroidアプリ実装
- 構築したシステムと別サービスの構築と連携
- AWS IoTを利用したAlexa連携
所感
AWS Amplifyを利用し、効率的に開発を進める方法、また既存のシステムに対しAmplifyを連携する部分でのハマりどころなど非常に有効な情報を知ることができました。 muiボード自体が非常に自宅環境において親和性が高く、かつIoTデバイスとして様々な機能をもっており、これからの機能拡張にも期待しております。